﻿using Rsdn.TreeGrid;

namespace Rsdn.Janus.ObjectModel
{
    /// <summary>
    /// Feature - это строка (обычно корневая строка, содержащая множество других строк)
    /// определяющая различные ключевые функции.
    /// Например: входящие, исходящие, поиск, фавориты - это все фунциональные возможности программы
    /// </summary>
	public interface IFeature : ITreeNode
	{
        /// <summary>
        /// Описание/ название.
        /// </summary>
        /// <value>The description.</value>
		string Description { get; }

        /// <summary>
        /// Дополнительная информация.
        /// </summary>
        /// <value>The info.</value>
		string Info { get; }

        /// <summary>
        /// Индекс иконки.
        /// </summary>
        /// <value>The index of the image.</value>
		int ImageIndex { get; }

        /// <summary>
        /// Выдает <see cref="Rsdn.Janus.ObjectModel.IFeature"/> при заданном индексе.
        /// </summary>
        /// <value></value>
		new IFeature this[int index] { get; }

        /// <summary>
        /// Уникальная строка ключа.
        /// Не должно быть двух одинаковых ключей
        /// </summary>
        /// <value>The key.</value>
		string Key { get; }

        /// <summary>
        /// Проверяет нужно ли обновление объекта если статус сообщения изменился.
        /// Требуется если нужно обновить одновременно несколько папок (форумов).
        /// Функция должна быть достаточно быстрой иначе проще перечитать всю папку.
        /// </summary>
        /// <param name="msg">Проверяемое сообщение.</param>
        /// <returns>
        ///   <c>true</c> если обновление необходимо; иначе, <c>false</c>.
        /// </returns>
        bool IsUpdateNeed(object msg);

        /// <summary>
        /// Обновляет содержимое с учетом <see cref="Rsdn.Janus.ObjectModel.IFeature.IsUpdateNeed"/>
        /// Если обновление не нужно обновляем только строку названия при необходимости (если там есть различные счетчики)
        /// </summary>
        void Refresh();
	}
}